#pragma once

#include <Windows.h>
#include <string>
#include <unordered_map>
#include <fstream>
#include <iostream>




namespace DotFileWriter {

/**
 * @brief DOT文件写入器类，用于生成Graphviz DOT格式文件
 */
class DotFile {
public:
    DotFile() = delete; // 默认构造函数已删除，防止无文件路径的实例化
    /**
     * @brief 构造函数，初始化DOT文件路径
     * @param filePath DOT文件的路径
     */
    DotFile(const std::string& filePath);
    /**
     * @brief 析构函数，清理资源
     */
    ~DotFile();
    /**
     * @brief 打开文件流准备写入
     * @return 成功打开返回true，否则返回false
     */
    bool open();
    /**
     * @brief 加载指定路径的文件
     * @param filePath 要加载的文件路径
     * @return 成功加载返回true，否则返回false
     */
    bool loadFile(const std::string& filePath);
    /**
     * @brief 关闭文件流
     */
    void close();

    /**
     * @brief 写入DOT文件头部信息
     */
    void writeHeader();
    /**
     * @brief 写入子图定义
     * @param name 节点名称
     * @param silLvl SIL安全等级
     * @param clusterName 集群名称
     */
    void writeSubgraph(const std::string& name, const std::string& silLvl, const std::string& clusterName);
    /**
     * @brief 写入节点定义
     * @param name 节点名称
     */
    void writeNode(const std::string& name);
    /**
     * @brief 写入DOT文件结束标记
     */
    void writeEnd();


private:
    std::string m_filePath; // Path to the DOT file
    std::ofstream m_outFile; // Output file stream for writing DOT content
};

} // Function to write a map to a DOT file


